/**
 * @param {number} n
 * @param {number} k
 * @return {number[][]}
 */
 
 var combine = function(n, k) {
    let res =[] ,path = []
    //确定递归的参数
    const tools = (n,k,starIndex) => {
        //确定回溯的结束条件
        if(path.length==k) {
            // console.log(path);
            // res.push(path)//这种写法不对因为此时 res push 进入的时 path 的引用  path改变后 res中的也会改变
            res.push([...path]) //path起到的作用只是一个临时的收集器
            // console.log(res,'++');
            return
        }
        //横向搜索
        for(let i=starIndex;i<=n-(k-path.length)+1;i++){
            path.push(i)//处理节点
            tools(n,k,i+1)//纵向递归
            path.pop()//回溯
        }
    }
    tools(n,k,1)
    return res
};
console.log(combine(4,2));